package com.cskaoyan.javase.oop1._4compare;

/**
 * 局部变量和成员变量是Java程序开发时，最常见的两种变量类型
 * 所以一定要搞清楚，它们之间的不同。
 * 局部变量和成员变量的比较，我们从以下五个方面去比较：
 *      1.在类中定义的位置不同
 *          成员变量: 定义在类中的成员位置,类体中空白处
 *          局部变量: 定义在类中的局部位置,代码块,方法体,大括号内部
 *      2.在内存中的位置不同
 *          成员变量: 存储在堆上的对象中
 *          局部变量: 存储在方法的栈帧中
 *      3.生命周期不同
 *          成员变量: 和对象同生共死,但是实际上当对象的引用被销毁,该对象就已经失去作用了,成员变量也同时失去作用.
 *          局部变量: 和方法调用"同生共死" 方法调用时生效,方法执行完毕销毁
 *      4.有无默认初始化不同
 *          成员变量: 有默认初始化,即便不做任何手动初始化赋值,也完全是可用的
 *          局部变量: 没有默认初始化,需要手动初始化,才可用
 *      5.作用范围
 *          成员变量: 实际上在整个类中都生效,具体来说,在整个类中的成员方法中
 *              都是可以无条件访问成员变量的
 *              但是对于非成员方法,static修饰的方法,是不能直接访问成员变量的
 *
 *          局部变量: 仅在作用域内部生效,大括号内部有效
 *
 *
 * @since 10:54
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

class A {
    // 成员变量
    int num;

    // 成员方法
    public void testMember() {
        int a;
        System.out.println(num);
    }

    // 非成员方法
    public static void testStatic() {
        // System.out.println(a);
        // System.out.println(num);
    }
}